package co.bugu.code.analysis.application.converter;

import org.springframework.beans.BeanUtils;

import java.lang.reflect.Field;

public class EntityConverter {

    /**
     * 将 source 对象拷贝到 target 对象中，并将 boolean 类型字段转换为 int (true → 1, false → 0)
     *
     * @param source 源对象（如 GitLab 的 Project）
     * @param target 目标对象（如 DB 实体 Project）
     * @throws Exception
     */
    public static void gitlabToApp(Object source, Object target) {
        // 先执行标准属性拷贝（非 boolean 字段会被正确赋值）
        BeanUtils.copyProperties(target, source);

        // 反射处理 boolean → int 字段
        Field[] targetFields = target.getClass().getDeclaredFields();
        for (Field targetField : targetFields) {
            String fieldName = targetField.getName();

            try {
                Field sourceField = source.getClass().getDeclaredField(fieldName);
                sourceField.setAccessible(true);
                targetField.setAccessible(true);

                // 判断是否是 boolean → int 转换
                if ((sourceField.getType() == Boolean.class || sourceField.getType() == boolean.class)
                        && targetField.getType() == Integer.class) {
                    Boolean value = (Boolean) sourceField.get(source);
                    targetField.set(target, value != null && value ? 1 : 0);
                }

            } catch (NoSuchFieldException ignored) {
                // 源对象中没有同名字段，忽略
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}
